// 请说出下列最终的执行结果，并解释为什么
var a = []
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i)
  }
}

a[6]()

// 结果
// 10

/**
 * 解析
 *
 * 在执行循环体的过程，只是存储了函数 function() { console.log(i) }到数组a内
 *
 * 待循环执行完成后，此时，全局作用域下 i = 10
 *
 * 执行 a[6]()
 *
 * 在执行函数内部代码 console.log(i) 时，由于函数内部并没有 i，所以会循着作用域链去查找变量 i，
 * 该函数的上一级作用域就是全局作用域，而全局作用域下的 i = 10，所以打印 10
 */